package jdx_14_基于CAS的新锁;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class T07_TestCyclicBarrier {
    public static void main(String[] args) {
        // CyclicBarrier 循环栅栏，满足条件后，栅栏被推倒
        CyclicBarrier barrier = new CyclicBarrier(20, //满足20条线程之后，就会执行一次栅栏
                () -> System.out.println("满人了，发车!"));
        for(int i=0; i<100; i++) {
                new Thread(()->{
                    try {
                        barrier.await(); //等待条件满足 不满足就被栅栏挡住(阻塞)
                    } catch (InterruptedException | BrokenBarrierException e) {
                        e.printStackTrace();
                    }
                }).start();
        }
    }
}

/*
[CyclicBarrier] 应用的场景
比如我有三件事情:
(1)数据库
(2)下载
(3)访问网络资源

当然我可以每一件事情都可以开一条线程去执行，但是有个要求，只有当这三条线程都准备完成之后，才开始执行操作
此时就可以用到循环栅栏



 */
